package com.ziyun.pop.common.token;

import com.service.common.utils.Md5Util;
import io.renren.common.utils.RedisUtils;
import io.renren.common.utils.StringUtil;
import io.renren.modules.sys.entity.SysUserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.UUID;

/**
 * token redis 实现方法
 * @author zh
 * @date 2019/1/514:16
 */
@Component
public class RedisTokenManager implements TokenManager {
    @Autowired
    private RedisUtils redisUtils;


    private static final long EXPIRE_TIME = 6 * 60 * 60;  //单位秒

    @Override
    public String createToken(SysUserEntity userBaseInfo) {
        String userKey = userBaseInfo.getUserId() + userBaseInfo.getUsername();
        // 查询用户是否已经登录
        if (StringUtil.isNotEmpty(redisUtils.get(userKey))){
            //删除 该用户信息
            String tokenKey = redisUtils.get(userKey);
            redisUtils.delete(tokenKey);
            redisUtils.delete(userKey);
        }

        String tokenKey = userKey + System.currentTimeMillis();
        tokenKey =  Md5Util.getMD5Code(tokenKey);
        redisUtils.set(userKey,tokenKey,EXPIRE_TIME);
        redisUtils.set(tokenKey,userBaseInfo,EXPIRE_TIME);
        return tokenKey;
    }

    @Override
    public void refreshToken(String token) {
        if (StringUtil.isNotEmpty(redisUtils.get(token))){
            redisUtils.setExpire(token,EXPIRE_TIME);
        }
    }

    @Override
    public SysUserEntity getUserInfoBToken(String token) {

        if (StringUtil.isNotEmpty(redisUtils.get(token))){
            return  redisUtils.get(token, SysUserEntity.class,EXPIRE_TIME);
        }
        return null;
    }

    @Override
    public boolean isActive(String token) {
        if (StringUtil.isNotEmpty(redisUtils.get(token))){
            return  true;
        }
        return false;
    }

    @Override
    public Long getExpire(String token) {
        if (StringUtil.isNotEmpty(redisUtils.get(token))){
            return  redisUtils.getExpire(token);
        }
        return null;
    }

    public static long getExpireTime() {
        return EXPIRE_TIME;
    }
}
